package com.itheima.d3_transform_stream;


import java.io.*;

/**
 * 目标：掌握字符输入转换流的作用。
 *
 * 不同编码读取出现乱码的问题：
 *      如果代码编码和被读取的文本文件的编码是不一致的，使用字符流读取文本文件时就会出现乱码！
 *
 *  字符流：
 *     字符输入流    Reader   FileReader  字符缓冲输入流:BufferedReader      字符输入转换流：InputStreamReader
 *     字符输出流    Writer   FileWriter  字符缓冲输出流:BufferedWriter      字符输出转换流：OutputStreamWrite
 *
 *
 *      InputStreamReader（字符输入转换流）：
 * 解决不同编码时，字符流读取文本内容乱码的问题。
 * 解决思路：先获取文件的原始字节流，再将其按真实的字符集编码转成字符输入流，这样字符输入流中的字符就不乱码了。
 *      构造器
 *  public InputStreamReader(InputStream is)    把原始的字节输入流，按照代码默认编码转成字符输入流（与直接用FileReader的效果一样）
 *  public InputStreamReader(InputStream is ，String charset)    把原始的字节输入流，按照指定字符集编码转成字符输入流(重点)
 *
 */
public class InputStreamReaderTest2 {
    public static void main(String[] args) {
        try (
                // 1、得到文件的原始文件字节输入流（原始文件的编码是GBK形式，所以也是GBK的字节流形式）
                InputStream is = new FileInputStream("Day09Io-App2/src/itheima06.txt");
                // 2、把原始的文件字节输入流按照指定的字符集编码转换成字符输入转换流
                Reader isr = new InputStreamReader(is, "GBK");
                // 3、把字符输入流包装成缓冲字符输入流
                BufferedReader br = new BufferedReader(isr);

                //自己试一试：
                InputStream zis = new FileInputStream("Day09Io-App2\\src\\zengjihong2.txt");
                Reader zisr = new InputStreamReader(zis,"UTF-8");
                BufferedReader zbr = new BufferedReader(zisr);
                ){
            String line;
            while ((line = br.readLine()) != null){
                System.out.println(line);
            }

            System.out.println("----------------自己试一试-----------------");
            String zline;
            while ((zline = zbr.readLine()) != null){
                System.out.println(zline);
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
